package com.zlp.mall.modules.pms.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zlp.mall.common.api.Pager;
import com.zlp.mall.modules.pms.dto.req.ProductAddReq;
import com.zlp.mall.modules.pms.dto.req.ProductQueryReq;
import com.zlp.mall.modules.pms.dto.req.ProductUpdReq;
import com.zlp.mall.modules.pms.dto.resp.ProductResp;
import com.zlp.mall.modules.pms.dto.resp.ProductUpdInfoResp;
import com.zlp.mall.modules.pms.model.Product;

import java.util.List;

/**
 * <p>
 * 商品信息 服务类
 * </p>
 *
 * @author ZouLiPing
 * @since 2021-09-23
 */
public interface ProductService extends IService<Product> {


    /**
     * 根据分页获取商品列表
     * @param productQueryReq
     * @date: 2021/9/26 17:07
     * @return: com.zlp.mall.common.api.Pager<com.zlp.mall.modules.pms.dto.resp.ProductResp>
     */
    Pager<ProductResp> list(ProductQueryReq productQueryReq);


    /**
     * 获取商品详情获
     * @param id
     * @date: 2021/9/26 17:55
     * @return: com.zlp.mall.modules.pms.dto.resp.ProductResp
     */
    ProductResp getProductDetail(Long id);

    /** 
     * 根据品牌ID 获取商品
     * @param id
     * @date: 2021/9/27 15:06
     * @return: java.util.List<com.zlp.mall.modules.pms.model.Brand> 
     */
    List<Product> getProductByBrandId(Long id);

    /** 
     * 更新品牌时要更新商品中的品牌名称
     * @param brandId 品牌ID
     * @param name
     * @date: 2021/9/27 15:52
     * @return: boolean 
     */
    boolean updateByBrandId(Long brandId, String name);

    /**
     * 根据商品分类ID查询商品信息
     * @param categoryId
     * @date: 2021/9/30 11:07
     */
    List<Product> getProductByCategoryIds(List<Long> categoryId);

    /**
     * 创建商品
     * @param productAddReq
     * @date: 2021/10/8 10:31
     * @return: boolean
     */
    boolean create(ProductAddReq productAddReq);

    /**
     * 批量修改删除状态
     * @param ids
     * @param deleteStatus
     * @date: 2021/10/11 15:30
     * @return: boolean
     */
    boolean updateDeleteStatus(List<Long> ids, Integer deleteStatus);

    /**
     * 根据商品名称或货号模糊查询
     * @param keyword
     * @date: 2021/10/11 15:43
     * @return: java.util.List<com.zlp.mall.modules.pms.dto.resp.ProductResp>
     */
    List<ProductResp> simpleList(String keyword);

    /**
     * 批量修改审核状态
     * @param ids
     * @param verifyStatus
     * @param detail
     * @date: 2021/10/11 15:48
     * @return: boolean
     */
    boolean updateVerifyStatus(List<Long> ids, Integer verifyStatus, String detail);

    /**
     * 批量上下架
     * @param ids
     * @param publishStatus
     * @date: 2021/10/11 15:59
     * @return: boolean
     */
    boolean updatePublishStatus(List<Long> ids, Integer publishStatus);

    /**
     * 批量设为新品
     * @param ids
     * @param newStatus
     * @date: 2021/10/11 16:01
     * @return: boolean
     */
    boolean updateNewStatus(List<Long> ids, Integer newStatus);

    boolean updateRecommendStatus(List<Long> ids, Integer recommendStatus);

    /** 
     * 根据商品ID获取商品编辑信息
     * @param id
     * @date: 2021/10/12 11:33
     * @return: com.zlp.mall.modules.pms.dto.resp.ProductUpdInfoResp 
     */
    ProductUpdInfoResp getUpdateInfo(Long id);

    /**
     * 更新商品
     * @param id
     * @param productUpdReq
     * @date: 2021/10/12 11:37
     * @return: boolean
     */
    boolean update(Long id, ProductUpdReq productUpdReq);

    /** 
     * 根据ID 获取商品信息
     * @param productId
     * @date: 2021/10/12 17:04
     * @return: com.zlp.mall.modules.pms.model.Product 
     */
    Product getByProductId(Long productId);
}
